package com.study.others.baseTypeOpe;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.junit.Test;

/**
* @Name: DataInOutputStream
* @Description: 数据输入输出流测试类
* 说明：数据输入输出流——操作基本数据类型的流
* 	DataOutputStream：数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。
* 		构造方法：
* 			DataOutputStream(OutputStream out)  创建一个新的数据输出流，将数据写入指定基础输出流。
* 		写数据方法：
* 			void write(int b)  将指定字节（参数 b 的八个低位）写入基础输出流。
* 			void write(byte[] b, int off, int len)  将指定 byte 数组中从偏移量 off 开始的 len 个字节写入基础输出流。
* 			void writeByte(int v)  将一个 byte 值以 1-byte 值形式写出到基础输出流中。
* 			void writeShort(int v)  将一个 short 值以 2-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeInt(int v)  将一个 int 值以 4-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeLong(long v)  将一个 long 值以 8-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeFloat(float v)   使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值，然后将该 int 值以 4-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeDouble(double v)   使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值，然后将该 long 值以 8-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeBoolean(boolean v)  将一个 boolean 值以 1-byte 值形式写入基础输出流。
* 			void writeChar(int v)  将一个 char 值以 2-byte 值形式写入基础输出流中，先写入高字节。
* 			void writeBytes(String s)  将字符串按字节顺序写出到基础输出流中。
* 			void writeChars(String s)  将字符串按字符顺序写入基础输出流。
* 			void writeUTF(String str)  以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。
* 	DataInputStream：数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 
*		构造方法：
*			DataInputStream(InputStream in) 使用指定的底层 InputStream 创建一个 DataInputStream。
*		读数据方法：
*			byte readByte()  读取并返回一个输入字节。
*			int read(byte[] b)  从包含的输入流中读取一定数量的字节，并将它们存储到缓冲区数组 b 中。 
*			int read(byte[] b, int off, int len)  从包含的输入流中将最多 len 个字节读入一个 byte 数组中。
*			short readShort()  读取两个输入字节并返回一个 short 值。
*			int readInt()  读取四个输入字节并返回一个 int 值。
*			long readLong()  读取八个输入字节并返回一个 long 值。	
*			float readFloat()  读取四个输入字节并返回一个 float 值。
*			double readDouble()  读取八个输入字节并返回一个 double 值。
*			boolean readBoolean() 读取一个输入字节，如果该字节不是零，则返回 true，如果是零，则返回 false。
*			char readChar()  读取两个输入字节并返回一个 char 值。	
*			String readLine() 从输入流中读取下一文本行。
*			String readUTF()  读入一个已使用 UTF-8 修改版格式编码的字符串。	
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-16 下午5:00:56 
* @Version: V1.0
 */
public class DataInOutputStream {
	
	@Test
	public void write() throws IOException {
		//创建数据输出流
		DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt")) ;
		//写数据
		dos.writeByte(10) ;	//1-byte
		dos.writeShort(1000) ; //2-byte
		dos.writeInt(10000) ; //4-byte
		dos.writeLong(100000) ; //8-byte
		dos.writeFloat(11.11F) ; //4-byte
		dos.writeDouble(22.22) ; //8-byte
		dos.writeBoolean(true) ; //1-byte
		dos.writeChar('a') ; //2-byte
		//释放资源
		dos.close() ;
	}
	
	@Test
	public void read() throws IOException {
		//创建数据读取流
		DataInputStream dis = new DataInputStream(new FileInputStream("data.txt")) ;
		//读数据
		byte b = dis.readByte() ;
		short s = dis.readShort() ;
		int i = dis.readInt() ;
		long l = dis.readLong() ;
		float f = dis.readFloat() ;
		double d = dis.readDouble() ;
		boolean bb = dis.readBoolean() ;
		char c = dis.readChar() ;
		//释放资源
		dis.close() ;
		System.out.println(b);
		System.out.println(s);
		System.out.println(i);
		System.out.println(l);
		System.out.println(f);
		System.out.println(d);
		System.out.println(bb);
		System.out.println(c);
	}
	
	
	
	
	
	
	
	
	
	

}
